#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_LEN 120		//栈的最大容量
typedef char ElemType;	//数据的类型
typedef struct SqStack
{
	ElemType * data;//data指向一块地址连续的空间，来存储栈的每一个元素
	int top;//栈顶，指定栈顶元素的下标				// top == -1   表示栈中没有元素，空栈
}sq;

//初始化一个栈
sq *InitStack()		
{
	struct SqStack * s = malloc( sizeof(struct SqStack) );
	s->data = malloc(sizeof(ElemType) * MAX_LEN);	
	s->top = -1;					
	return s;
}
//判断是否为空栈
int IsEmpty(struct SqStack * s)
{
	//栈为空：栈不存在 || 栈里面没有元素
	if( s == NULL || s->top == -1 )
	{
		return 1;
	}
	return 0;
}

//判断栈满
int IsFull(sq *s)
{
	return (s->top==MAX_LEN-1);//从
}
//入栈 1成功 0失败
int Push(sq *s,ElemType d)
{
	if(IsFull(s)||s==NULL)
	{
		printf("Push error! \n");
		return 0;	
	}
	else
	{
		s->data[++s->top]=d;
		return 1;。
	}
}
//出栈
int Pop(sq *s)
{
	if(IsEmpty(s)||s==NULL)
	{
		printf("Pop error! \n");
		return 0;
	}
	else
	{
		s->data[s->top--]=0;
		return 1;
	}
}
void CleanStack(sq	*s)
{
	memset(s->data,0,MAX_LEN);
	s->top=-1;
}

void LineEdit(sq *s)
{
	ElemType ch;
	ch=getchar();
	while(ch!='\n')
	{
		switch(ch)
		{
			case '#':
				Pop(s);break;
			case '@':
				CleanStack(s);break;
			default:
				Push(s,ch); break;
		}
		ch=getchar();
	}
	ElemType str[MAX_LEN];
	int i=0;
	while(!IsEmpty(s))
	{
		str[i]=s->data[s->top--];
		i++;
	}
	int l=strlen(str);
	for(i=l-1;i>=0;i--)
	printf("%c",str[i]);
	printf("\n");
}

int main()
{
	sq *s=InitStack();
	printf("Please input:\n");
	LineEdit(s);
	
	return 0;
}
